import os
from datetime import timedelta


class Config:
    # 基础配置
    DEBUG = False
    TESTING = False
    SECRET_KEY = os.environ.get('SECRET_KEY', 'your-secret-key-here')
    JSON_SORT_KEYS = False  # 禁止自动排序JSON响应

    # 数据库配置
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:050824@localhost:3306//pyshop'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = False  # 是否打印SQL语句（调试用）

    # 分页配置
    DEFAULT_PER_PAGE = 10  # 默认每页显示数量

    # JWT配置（如果使用JWT认证）
    JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY', 'jwt-secret-key')
    JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=1)
    JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=30)

    # 文件上传配置
    MAX_CONTENT_LENGTH = 16 * 1024 * 1024  # 最大上传文件大小：16MB
    UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', 'uploads')

    # 日志配置
    LOG_LEVEL = 'INFO'
    LOG_FILE = 'app.log'


class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_ECHO = True  # 开发环境打印SQL语句
    LOG_LEVEL = 'DEBUG'


class TestingConfig(Config):
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'  # 使用内存数据库进行测试
    WTF_CSRF_ENABLED = False


class ProductionConfig(Config):
    SQLALCHEMY_POOL_SIZE = 10  # 数据库连接池大小
    SQLALCHEMY_MAX_OVERFLOW = 20  # 最大溢出连接数
    LOG_LEVEL = 'WARNING'


# 配置映射
config_map = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}